今天來實作提交交易到full node,但這個Address是我們建立的,裡面並沒有EGLD,所以需要從外面的錢包轉帳進來,我們使用的Address是
erd1aym5zlt5dhmjr4gqkcyuswpejvr4aam06mns0gmfc4unehxw337sykx33c
前面我們介紹的Elrond wallet轉帳到我們的Address中,
交易紀錄,可以看到查詢鏈上資料,我們的address有10顆EGLD跟nonce為0,有這些資料就可以開始設定我們的request了,
先新增接收sent request回傳的response的struct,
internal/model/transactionRes.go
package model
type TransactionRes struct {
data any
error string
code string
}
然後新增post函式
internal/utils.go
func HttpPost(url string, request any, model any) {
body, _ := json.Marshal(request)
fmt.Println(request)
resp, err := http.Post(url, "application/json", bytes.NewBuffer(body))
if err != nil {
fmt.Println(err)
panic(err)
}
fmt.Println(resp)
defer func(Body io.ReadCloser) {
err := Body.Close()
if err != nil {
}
}(resp.Body)
decoder := json.NewDecoder(resp.Body)
err = decoder.Decode(&model)
if err != nil {
fmt.Println(err)
return
}
}
再來就是新增執行函式
internal/wallet/walletUtils.go
在import要新增
"github.com/ElrondNetwork/elrond-sdk/erdgo/data"
func SentTransaction(sender, receiver, value string, nonce, gasPrice, gasLimit int, pemPrivateKey []byte) {
transaction := data.Transaction{
Nonce: uint64(nonce),
Value: value,
SndAddr: sender,
RcvAddr: receiver,
Data: []byte(""),
GasPrice: uint64(gasPrice),
GasLimit: uint64(gasLimit),
ChainID: "T",
Version: 1,
}
err := erdgo.SignTransaction(&transaction, pemPrivateKey)
if err != nil {
return
}
fmt.Printf("Signature: %s", transaction.Signature)
var transactionRes model.TransactionRes
utils.HttpPost(url+"/transaction/send", transaction, &transactionRes)
fmt.Println(transactionRes)
}
然後呼叫函式測試一下
walletUtils.SentTransaction(address,
"erd1dtfqa76nzjgy0wcg859ls4rh5fet9pnqnmh0337sy3usjmuplmksjhs5l2",
"1000000000000000000",
0,
1000000000,
50000,
pemPrivateKey,
)
我們可以看到回傳的http state是201,我們在查詢一下Address餘額,
可以看到餘額較上一張圖片少了一顆多,多得是消耗的手續費,然後也看到Nonce加一了,剛剛交易的內容。
這樣就差不多完成所有的函式了,再來要開始使用Gin設計API介面了。